Ví dụ Thuật toán dòng dữ liệu

Một ví dụ của thuật toán dòng dữ liệu là việc tìm số bị thiếu trong một dãy số. Giả sử dữ liệu vào là một hoán vị của các số từ 1 đến n nhưng bị thiếu đúng một số. Bài toán đặt ra là cần tìm số bị thiếu. Một thuật toán đơn giản cho bài toán này là như sau. Khởi tạo một biến s bằng 0. Mỗi lần nhận được một số mới x từ dữ liệu vào, cộng x vào s. Đến cuối dòng dữ liệu, s đúng bằng tổng tất cả các số trong dữ liệu vào. Nếu không có số nào bị thiếu thì tổng đó đúng bằng tổng các số từ 1 đến n, tức là n·(n+1)/2. Do đó, n·(n+1)/2 - s chính là số bị thiếu. Như vậy thuật toán chỉ cần lưu trữ đúng một giá trị mà vẫn có thể giải được bài toán đặt ra bất kể kích thước bài toán là bao nhiêu (nếu tính bộ nhớ theo số bit thì bộ nhớ cần dùng là O(log n), vẫn nhỏ hơn kích thước dữ liệu vào là O(n log n) rất nhiều).

Tài liệu tham khảo

WikiPedia: Thuật toán dòng dữ liệu ftp://ftp.cs.rochester.edu/pub/papers/theory/05.tr... http://www.cs.mcgill.ca/~denis/notes09.pdf http://domino.research.ibm.com/comm/research_proje... http://www-01.ibm.com/software/data/infosphere/str... http://www.dagstuhl.de/de/program/calendar/semhp/?... http://www.cse.buffalo.edu/~atri/courses/data-stre... http://www.cs.dartmouth.edu/~ac/Teach/CS85-Fall09/ http://www.cc.gatech.edu/~jx/reprints/talks/sigm07... http://www.eecs.harvard.edu/~michaelm/postscripts/... http://groups.csail.mit.edu/cag/streamit/index.sht...